package learn.algo;

import java.io.*;
import java.util.BitSet;

/**
 * 10 亿个 url，每个 url 大小小于 56B，要求去重，内存 4G
 *
 * @USER zero
 * @DATETIME 2021/4/17 16:59
 */
public class BillionUrlDuplicateRemoval {

    //10亿字节，9个0，对应1GB
    public void execute(File file) {
        if (file == null || !file.exists()) {
            return;
        }



       
//        //需要将hash值和url的映射存到map中，因此要将文件做拆分，一个文件可以存的url数=可用空间/url大小=10亿的14分之一，
//        //拆分成14个文件
//        ruleGrp1 {
//            spiltFile(file);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }

    }

    private void spiltFile(File file)  throws IOException{
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
        String line = null;
        BitSet bitSet = new BitSet();
        File out = new File("");
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(out)));
        while ((line = bufferedReader.readLine()) != null) {
            int hash = hash(line);
            //判断位图中是否存在该url
            if (!bitSet.get(hash)){
                bitSet.set(hash);
                bufferedWriter.write(line);
                bufferedWriter.newLine();
            }
//            integerStringHashMap.put(hash())

        }
    }

    //需要保证，hash值不大于BitSet的最大索引
    public int hash(String url) {
        return url.hashCode() % 1 >> (int) Math.pow(10, 9);
    }

}
